package dao;

import java.util.List;

import org.hibernate.Session;

import entity.EstadisticaPermanenciaBD;
import entity.FacturaBD;
import entity.MesaBD;
import entity.PlatoBD;
import entity.RegistroAtencionBD;

public class MesaDAO extends DAO {

	@SuppressWarnings("unchecked")
	public List<MesaBD> getMesasByEstado(String estado) {
		Session s = super.getSession();
		List<MesaBD> r = s.createQuery("from MesaBD m where m.estado = ?").setString(0, estado).list();
//		s.close();
		return r;
	}
	
	@SuppressWarnings("unchecked")
	public List<MesaBD> getMesasOfMozo(Integer legajo) {
		Session s = super.getSession();
		List<MesaBD> r = s.createQuery("from MesaBD m where m.mozo.legajo = ?").setInteger(0, legajo).list();
//		s.close();
		return r;
	}
	
	@SuppressWarnings("unchecked")
	public List<MesaBD> getMesasOfSector(Integer restaurante, Integer sector) {
		Session s = super.getSession();
		List<MesaBD> r = s.createQuery("from MesaBD m where m.pk.idRestaurante = ? " +
				"and m.pk.idSector= ?").setInteger(0, restaurante).setInteger(1, sector).list();
		s.close();
		return r;
	}

	public void liberarMesa(MesaBD mesa) {
		super.getSession().close();
		Session s = super.getSession();
		s.beginTransaction();
		s.saveOrUpdate(mesa);
		s.getTransaction().commit();
		s.flush();
		s.close();
	}
	
	public void RegistrarAtencion(RegistroAtencionBD registro) {
		super.getSession().close();
		Session s = super.getSession();
		s.beginTransaction();
		s.saveOrUpdate(registro);
		s.getTransaction().commit();
		s.flush();
		s.close();
	}
	
	public void RegistrarFactura(FacturaBD factura) {
		super.getSession().close();
		Session s = super.getSession();
		s.beginTransaction();
		s.saveOrUpdate(factura);
		s.getTransaction().commit();
		s.flush();
		s.close();
	}
	
	public void RegistrarEstadisticaPermanencia(EstadisticaPermanenciaBD estadistica) {
		super.getSession().close();
		Session s = super.getSession();
		s.beginTransaction();
		s.saveOrUpdate(estadistica);
		s.getTransaction().commit();
		s.flush();
		s.close();
	}
	
	public List<MesaBD> getMesas() {
		Session s = super.getSession();
		List<MesaBD> r = s.createQuery("from MesaBD m").list();
		s.close();
		return r;
	}

	public List<PlatoBD> getPlatos() {
		Session s = super.getSession();
		List<PlatoBD> r = s.createQuery("from PlatoBD m").list();
		s.close();
		return r;
	}	
	public void cerrarMesa(MesaBD m) {
		// TODO Auto-generated method stub
		Session s = super.getSession();
		s.beginTransaction();
		s.saveOrUpdate(m);
		s.getTransaction().commit();
		s.flush();
		s.close();
		
	}

	public Integer getMaximoNumeroFactura(Integer idRestaurante) {
		Session s = super.getSession();
		return  (Integer) s.createSQLQuery("select max(idFactura) from facturas where idRestaurante = ?").setInteger(0, idRestaurante).uniqueResult();
	}	
}
